///////////////////////////////////////////////////////////////////////////////////////////////////
// Illusion Ray Development Kit (IDK)           Copyright (c) 2010 ( dimitriy.martynenko@gmail.com )
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2010-05-22
// Updated : ...
// Licence : NEW BSD
// Info	   : IDK Engine
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once

#include <IDK.hpp>

#include <OES/khrplatform.h>
#include <OES/eglplatform.h>
#include <OES/gl2platform.h>

#include <OES/egl.h>
#include <OES/gl2.h>
#include <OES/gl2extimg.h>

namespace Renderer
{
#	define glValid(X) (X); glValidFn(glGetError());

	inline void glValidFn(GLenum code)
	{
		switch(code)
		{
		case GL_NO_ERROR :
			break;
		case GL_INVALID_ENUM  :
			iError("ES ERROR : GL_INVALID_ENUM");
		case GL_INVALID_VALUE :
			iError("ES ERROR : GL_INVALID_VALUE");
		case GL_INVALID_OPERATION :
			iError("ES ERROR : GL_INVALID_OPERATION");
		case GL_OUT_OF_MEMORY:
			iError("ES ERROR : GL_OUT_OF_MEMORY");
		default:
			iError("ES ERROR : Unknown");
		}
	}
	inline const char * eglGetErrorStr()
	{
		EGLint nErr = eglGetError();

		switch(nErr)
		{
		case EGL_SUCCESS:
			return "EGL_SUCCESS";
		case EGL_BAD_DISPLAY:
			return "EGL_BAD_DISPLAY";
		case EGL_NOT_INITIALIZED:
			return "EGL_NOT_INITIALIZED";
		case EGL_BAD_ACCESS:
			return "EGL_BAD_ACCESS";
		case EGL_BAD_ALLOC:
			return "EGL_BAD_ALLOC";
		case EGL_BAD_ATTRIBUTE:
			return "EGL_BAD_ATTRIBUTE";
		case EGL_BAD_CONFIG:
			return "EGL_BAD_CONFIG";
		case EGL_BAD_CONTEXT:
			return "EGL_BAD_CONTEXT";
		case EGL_BAD_CURRENT_SURFACE:
			return "EGL_BAD_CURRENT_SURFACE";
		case EGL_BAD_MATCH:
			return "EGL_BAD_MATCH";
		case EGL_BAD_NATIVE_PIXMAP:
			return "EGL_BAD_NATIVE_PIXMAP";
		case EGL_BAD_NATIVE_WINDOW:
			return "EGL_BAD_NATIVE_WINDOW";
		case EGL_BAD_PARAMETER:
			return "EGL_BAD_PARAMETER";
		case EGL_BAD_SURFACE:
			return "EGL_BAD_SURFACE";
		default:
			return "unknown";
		}
	}
}